package model

import (
	"background/db"
	"background/logs"
	"fmt"
	"strings"

	"qiniupkg.com/x/log.v7"
)

type Memo struct {
	ID         int64  `sql:"id" json:"id"`
	Title      string `sql:"title" json:"title"`
	CreateTime string `sql:"create_time" json:"create_time"`
	Content    string `sql:"content"  json:"content"`
}

func CreateMemo(memo Memo) error {
	sql := fmt.Sprintf(`insert into memo(title,create_time,content) select  '%s','%s','%s'
			from dual where not exists (select * from memo where memo.title='%s')  `,
		memo.Title, memo.CreateTime, strings.Replace(memo.Content, "'", "\\'", -1), memo.Title)
	log.Print(sql)
	_, e := db.GetMysqlClient().Query(sql)
	if nil != e {
		logs.Error(e.Error())
		return e
	}
	return nil
}

func UpdateMemo(memo Memo) error {
	sql := fmt.Sprintf(`update  memo set  title = '%s',
		create_time = '%s',
		content = '%s' where memo.id = %d`,
		memo.Title, memo.CreateTime, strings.Replace(memo.Content, "'", "\\'", -1), memo.ID)
	_, e := db.GetMysqlClient().Query(sql)
	if nil != e {
		logs.Error(e.Error())
		return e
	}
	return nil
}

func DeleteMemo(id int32) error {
	sql := fmt.Sprintf(`delete from memo where memo.id = '%d'`, id)
	log.Print(sql)
	_, e := db.GetMysqlClient().Query(sql)
	if nil != e {
		logs.Error(e.Error())
		return e
	}
	return nil
}

func ReadMemo(id int32) ([]Memo, error) {
	memo := []Memo{}
	sql := fmt.Sprintf(`select * from memo where memo.id = '%d'`, id)
	e := db.GetMysqlClient().Query2(sql, &memo)
	if nil != e {
		logs.Error(e.Error())
		return nil, e
	}
	return memo, nil
}

func MemoCnt() int {
	sql := fmt.Sprintf(`select count(*) from memo`)
	type Count struct {
		Count int32 `sql:"count(*)"`
	}
	cnts := []Count{}
	e := db.GetMysqlClient().Query2(sql, &cnts)
	if nil != e {
		logs.Error(e.Error())
		return 0
	}
	return int(cnts[0].Count)
}

func GetMemos(title string, limit int, offset int) ([]Memo, error) {
	memo := []Memo{}
	sql := fmt.Sprintf(`select * from memo where memo.title like '%s%%'  limit %d offset %d`,
		title, limit, offset)
	log.Print(sql)
	e := db.GetMysqlClient().Query2(sql, &memo)
	if nil != e {
		logs.Error(e.Error())
		return nil, e
	}
	return memo, nil

}
